import { Injectable } from '@angular/core';
import { VisualService } from './visual.service';

@Injectable({
  providedIn: 'root'
})
export class CommonService {

  constructor() { }

  public static getid(pre): string {
    let id = pre;
    let s = new Date();
    id +=
      s.getFullYear().toString() +
      s.getMonth().toString() +
      s.getDate().toString() +
      s.getHours().toString();
    id +=
      s.getMinutes().toString() +
      s.getSeconds().toString() +
      s.getMilliseconds().toString() +
      Math.round(Math.random() * 1000).toString();
    const tsleep = (time) => {
      return new Promise(resolve => setTimeout(resolve, time))
    }
    tsleep(1)
    return id.slice(0, 21);
  }

  public static clone(obj) {//clone任意的对象，借助json来完成
    return JSON.parse(JSON.stringify(obj))
  }
  public static ToBase64(url, outvalue): void {

    /*转换base64*/
    var img = document.getElementById('imgfile')
    var imgFile = new FileReader();
    imgFile.readAsDataURL(url);

    imgFile.onload = function () {
      outvalue = this.result; //base64数据  

    }

  }

  public static save(data, filename) {
    var blob = new Blob([JSON.stringify(data)], { type: 'application/json' })
    // 创建一个blob的对象，把Json转化为字符串作为我们的值
    // 不是IE浏览器使用的下面的
    var url = window.URL.createObjectURL(blob)
    // 上面这个是创建一个blob的对象连链接，
    var link = document.createElement('a')
    // 创建一个链接元素，是属于 a 标签的链接元素，所以括号里才是a，

    link.href = url;
    // 把上面获得的blob的对象链接赋值给新创建的这个 a 链接
    link.setAttribute('download', filename)
    // 设置下载的属性（所以使用的是download），这个是a 标签的一个属性
    // 后面的是文件名字，可以更改
    link.click();
    // 使用js点击这个链接



  }
  public static getFileContent(fileInput, callback) {

    if (fileInput.files && fileInput.files.length > 0 && fileInput.files[0].size > 0) {
      //下面这一句相当于JQuery的：var file =$("#upload").prop('files')[0];
      var file = fileInput.files[0];
      if (window.FileReader) {
        var reader = new FileReader();
        reader.onloadend = function (evt) {
          if (evt.target.readyState == FileReader.DONE) {
            callback(evt.target.result);
          }
        };
        // 包含中文内容用gbk编码
        reader.readAsText(file, 'gbk');
      }
    }
  };

  public static open(fileinputid: string, callback: (s: string) => void): void {

    var file = document.getElementById('openFile')
    file.onchange = () => {
      CommonService.getFileContent(file, (s) => {
        callback(s);
      })
    }
    file.click()


  }

  public static getFirstValidName(list: string[], name: string): string {
    console.log(list);
    console.log(name);
    if (list.findIndex(v => v === name) === -1) return name
    let duplicateList = []
    list.forEach(v => {
      if (v.startsWith(name) && v.includes('_'))
        duplicateList.push(v.slice(name.length + 1))
    })
    console.log(duplicateList);
    let i = 0

    while (duplicateList.includes(String(i))) {
      i++

    }
    return name + '_' + i
  }

}
